import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main1(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[]array=new int[100];
        for(int i=0;i<n;i++){
            array[i]=sc.nextInt();
        }
        Solution1 solution1=new Solution1();
        System.out.println(solution1.maxSubArray(array));
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[]array=new int[100];
        for(int i=0;i<n;i++){
            array[i]=sc.nextInt();
        }
        Solution solution=new Solution();
        System.out.println(solution.massage(array));
    }
}


class Solution1 {
    public int maxSubArray(int[] nums) {
        int n=nums.length;
        int max=nums[0];
        int x=0;
        for (int i=0;i<n;i++){
            x=Math.max(x+nums[i],nums[i]);
            max=Math.max(max,x);
        }
        return max;
    }
}

class Solution {
    public int massage(int[] nums) {
        int n=nums.length;
        if(n==0){
            return 0;
        }
        int[][]dp=new int[n+1][2];
        dp[0][0]=0;
        dp[0][1]=nums[0];
        for (int i = 1; i < n ; i++) {
            //dp[i][0]不加，即前一位更大的一个
            dp[i][0]=Math.max(dp[i-1][0],dp[i-1][1]);
            //dp[i][1]加，即前一位最大的加上此时的nums[i]
            //为什么不是前两位，因为前一位dp[i][0]中存放的是前一位
            //加或不加的最大值，即

            //如果前两位中的dp[i][1]大于dp[i][0],
            //那么前一位的dp[i][0]中存放的就是前两位中的dp[i][1]

            //如果前两位中dp[i][0]大于dp[i][1]
            //那么前一位的dp[i][0]中存放的就是前三位中的dp[i][1]和dp[i][0]中的最大值
            dp[i][1]=dp[i-1][0]+nums[i];
        }
        return Math.max(dp[n-1][0],dp[n-1][1]);
    }
}

